<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
use think\Session;
use app\common\controller\Api;
use app\common\model\Area;
use app\common\model\Version;
use fast\Random;
use think\Config;
class Common extends Controller{
      public function upload(){ 
       $file = $this->request->file('file');
          if (empty($file)) {
              $this->error(__('No file upload or server upload limit exceeded'));
          }
          $sha1 = $file->hash();
          $upload = Config::get('upload');
          preg_match('/(\d+)(\w+)/', $upload['maxsize'], $matches);
          $type = strtolower($matches[2]);
          $typeDict = ['b' => 0, 'k' => 1, 'kb' => 1, 'm' => 2, 'mb' => 2, 'gb' => 3, 'g' => 3];
          $size = (int)$upload['maxsize'] * pow(1024, isset($typeDict[$type]) ? $typeDict[$type] : 0);
          $fileInfo = $file->getInfo();
          $suffix = strtolower(pathinfo($fileInfo['name'], PATHINFO_EXTENSION));
          $suffix = $suffix && preg_match("/^[a-zA-Z0-9]+$/", $suffix) ? $suffix : 'file';
          $mimetypeArr = explode(',', strtolower($upload['mimetype']));
          $typeArr = explode('/', $fileInfo['type']);
          if (in_array($fileInfo['type'], ['text/x-php', 'text/html']) || in_array($suffix, ['php', 'html', 'htm'])) {
              $this->error(__('Uploaded file format is limited'));
          }
          if ($upload['mimetype'] !== '*' &&
              (
                  !in_array($suffix, $mimetypeArr)
                  || (stripos($typeArr[0] . '/', $upload['mimetype']) !== false && (!in_array($fileInfo['type'], $mimetypeArr) && !in_array($typeArr[0] . '/*', $mimetypeArr)))
              )
          ) {
              $this->error(__('Uploaded file format is limited'));
          }
          $imagewidth = $imageheight = 0;
          if (in_array($fileInfo['type'], ['image/gif', 'image/jpg', 'image/jpeg', 'image/bmp', 'image/png', 'image/webp']) || in_array($suffix, ['gif', 'jpg', 'jpeg', 'bmp', 'png', 'webp'])) {
              $imgInfo = getimagesize($fileInfo['tmp_name']);
              if (!$imgInfo || !isset($imgInfo[0]) || !isset($imgInfo[1])) {
                  $this->error(__('Uploaded file is not a valid image'));
              }
              $imagewidth = isset($imgInfo[0]) ? $imgInfo[0] : $imagewidth;
              $imageheight = isset($imgInfo[1]) ? $imgInfo[1] : $imageheight;
          }  
          $replaceArr = [
              '{year}'     => date("Y"),
              '{mon}'      => date("m"),
              '{day}'      => date("d"),
              '{hour}'     => date("H"),
              '{min}'      => date("i"),
              '{sec}'      => date("s"),
              '{random}'   => Random::alnum(16),
              '{random32}' => Random::alnum(32),
              '{filename}' => $suffix ? substr($fileInfo['name'], 0, strripos($fileInfo['name'], '.')) : $fileInfo['name'],
              '{suffix}'   => $suffix,
              '{.suffix}'  => $suffix ? '.' . $suffix : '',
              '{filemd5}'  => md5_file($fileInfo['tmp_name']),
          ];
          $savekey = $upload['savekey'];
          $savekey = str_replace(array_keys($replaceArr), array_values($replaceArr), $savekey);

          $uploadDir = substr($savekey, 0, strripos($savekey, '/') + 1);
          $fileName = substr($savekey, strripos($savekey, '/') + 1);
          //
          $splInfo = $file->validate(['size' => $size])->move(ROOT_PATH . '/public/recruitment' . $uploadDir, $fileName);
          if ($splInfo) {
            return json('/recruitment'.$uploadDir.$fileName);
          } else {
              $this->error($file->getError());
          }
      }
  
    
}